package com.atwisdom.star.core.dao.pojo.functionClass;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.common.typeHandler.MyFastjsonTypeHandler;
import com.atwisdom.star.core.dao.pojo.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import lombok.Data;

/**
 * 
 * @TableName api_send_data
 */
@TableName(value ="api_send_data",autoResultMap = true)
@Data
public class ApiSendData  extends BaseEntity {
    /**
     * 主键标识
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 操作:更新、插入、删除、作废等
     */
    @TableField(value = "opType")
    private String opType;

    /**
     * 主模型
     */
    @TableField(value = "model")
    private String model;

    /**
     * 主体类
     */
    @TableField(value = "className")
    private String className;

    /**
     * 主体类字段key,vlaue
     */
    @TableField(value = "fieldValues",typeHandler = MyFastjsonTypeHandler.class)
    private JSONArray fieldValues;

    /**
     * 验证key,如：id或code
     */
    @TableField(value = "sendKey")
    private String sendKey;


    /**
     * 验证value,如 100或p001
     */
    @TableField(value = "sendValue")
    private String sendValue;

    /**
     * 已发送数据
     */
    @TableField(value = "sendData",typeHandler = MyFastjsonTypeHandler.class)
    private JSONObject sendData;

    /**
     * 0:未执行，1、执行中，3：异常，4、已完成
     */
    @TableField(value = "status")
    private Integer status;

    /**
     * 是否可用
     */
    @TableField(value = "hierFlag")
    private boolean hierFlag;

    /**
     * 说明
     */
    @TableField(value = "comments")
    private String comments;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    public ApiSendData(){

    }

    /**
     * 有参构造方法
     *
     * @param jsonObject 参数
     */
    public ApiSendData(JSONObject jsonObject) {
        Set<String> keys = jsonObject.keySet();
        this.id = keys.contains("id") ? jsonObject.getLong("id") : null;
        this.opType = jsonObject.getString("opType");
        this.model = keys.contains("model") ? jsonObject.getString("model") : null;
        this.className = keys.contains("className") ? jsonObject.getString("className") : null;
        this.fieldValues = keys.contains("fieldValues") ? jsonObject.getJSONArray("fieldValues") : null;
        this.sendKey = keys.contains("sendKey") ? jsonObject.getString("sendKey") : null;
        this.sendData = keys.contains("fieldNames") ? jsonObject.getJSONObject("sendData") : null;
        this.status = keys.contains("status") ? jsonObject.getInteger("status"):null;
        this.hierFlag = keys.contains("hierFlag") ? jsonObject.getBoolean("hierFlag"):null;
        this.comments = keys.contains("comments") ? jsonObject.getString("comments") : null;
    }


    /**
     * 获取摘要数据列
     *
     * @return 反回查询列
     */
    public static String[] fetchSimpleColumns() {
        List<String> columns = new ArrayList<>();
        columns.add("id");
        columns.add("opType");
        columns.add("model");
        columns.add("className");
        columns.add("sendKey");
        columns.add("status");
        columns.add("hierFlag");
        columns.add("updatedBy");
        columns.add("updateTime");
        columns.add("createdBy");
        columns.add("createTime");
        return columns.toArray(new String[0]);
    }

    /**
     * 将当前模型对象转成jsonObject
     *
     * @return 返回结果
     */
    public JSONObject fetchJsonObject() {
        JSONObject JsonObject = new JSONObject();
        JsonObject.put("id", this.id);
        JsonObject.put("opType", this.opType);
        JsonObject.put("model", this.model);
        JsonObject.put("className", this.className);
        JsonObject.put("fieldValues", this.fieldValues);
        JsonObject.put("sendKey", this.sendKey);
        JsonObject.put("sendData", this.sendData);
        JsonObject.put("status", this.status);
        JsonObject.put("hierFlag", this.hierFlag);
        JsonObject.put("comments", this.comments);
        JsonObject.put("createdBy", this.createdBy);
        JsonObject.put("createTime", this.createTime);
        JsonObject.put("updatedBy", this.updatedBy);
        JsonObject.put("updateTime", this.updateTime);
        return JsonObject;
    }
}